package com.klcw.httpClient;

import java.io.*;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

/**
 * @ClassName HttpClientOp
 * @Description Http请求工具类
 * @Author dukang
 * @Date 2019/1/10 11:03
 * @Version 1.0
 **/
public class HttpClientOp {

    /**
     * @Author dukang
     * @Description get请求
     * @Date 11:05 2019/1/10
     * @Param []
     * @return java.lang.String
     **/
    public static String doGet(String httpUrl) {

        HttpURLConnection connection = null;
        InputStream is = null;
        BufferedReader br = null;
        String result = null;
        try {
            // 创建远程url连接对象
            URL url = new URL(httpUrl);
            // 通过Url远程连接对象打开一个连接
            connection = (HttpURLConnection) url.openConnection();
            // 设置请求方式
            connection.setRequestMethod("GET");
            // 设置主机超时时间
            connection.setConnectTimeout(15000);
            // 设置读取远程返回数据超时时间
            connection.setReadTimeout(60000);
            // 发送请求
            connection.connect();
            // 通过connection 连接获取输入流
            if(connection.getResponseCode() == 200){
                is = connection.getInputStream();
                // 封装输入流，并指定字符集
               br = new BufferedReader(new InputStreamReader(is,"UTF-8"));
               // 存放数据
                StringBuffer sbf = new StringBuffer();
                String temp = null;
                while ((temp = br.readLine()) != null){
                    sbf.append(temp);
                    sbf.append("\r\n");
                }
                result = sbf.toString();
            }

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // 关闭资源
            if(null != br){
                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(null != is){
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            // 关闭远程连接
            connection.disconnect();
        }
        return result;
    }


    /**
     * @Author dukang
     * @Description post请求
     * @Date 11:51 2019/1/10
     * @Param [httpUrl, param]
     * @return java.lang.String
     **/
    public static String doPost(String httpUrl,String param){
        String result = null;
        HttpURLConnection connection = null;
        OutputStream os = null;
        InputStream is = null;
        BufferedReader br = null;
        try {
            URL url = new URL(httpUrl);
            // 通过远程url连接对象打开连接
            connection = (HttpURLConnection) url.openConnection();
            // 设置请求方式
            connection.setRequestMethod("POST");
            connection.setConnectTimeout(15000);
            connection.setReadTimeout(60000);

            // 默认为false. 向远程服务器传输数据时需要设置
            connection.setDoInput(true);
            // 默认为false. 向远程服务器读取数据时需要设置
            connection.setDoOutput(true);

            // 设置传入参数的格式:请求参数应该是 name1=value1&name2=value2 的形式。
            connection.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
            // 设置鉴权信息：Authorization: Bearer da3efcbf-0845-4fe3-8aba-ee040be542c0
            connection.setRequestProperty("Authorization","Bearer da3efcbf-0845-4fe3-8aba-ee040be542c0");

            // 通过连接对象获取输出流
            os = connection.getOutputStream();
            // 通过输出流对象将参数写出去/传输出去,它是通过字节数组写出的
            os.write(param.getBytes());

            // 通过连接对象获取一个输入流，向远程读取
            if(connection.getResponseCode() == 200){

                is = connection.getInputStream();
                // 对输入流对象进行包装:charset根据工作项目组的要求来设置
               br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
                StringBuffer sb = new StringBuffer();
                String temp = null;
                while ((temp = br.readLine()) != null){
                    sb.append(temp);
                    sb.append("\r\n");
                }
                result = sb.toString();
            }
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // 关闭资源
            if (null != br) {
                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (null != os) {
                try {
                    os.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (null != is) {
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            // 断开与远程地址url的连接
            connection.disconnect();
        }
        return result;
    }
}
